import { route } from "quasar/wrappers";
import { useStore } from "vuex";

import {
  createRouter,
  createMemoryHistory,
  createWebHistory,
  createWebHashHistory,
} from "vue-router";
import routes from "./routes";
import store from "../store";
import { authService } from "../service/authService";

const whiteList = ["/login", "/403"];

function hasPermission(router) {
  if (whiteList.indexOf(router.path) !== -1) {
    return true;
  }

  return true;
}

/*
 * If not building with SSR mode, you can
 * directly export the Router instantiation;
 *
 * The function below can be async too; either use
 * async/await or return a Promise which resolves
 * with the Router instance.
 */

export default route(function (/* { store, ssrContext } */) {
  const createHistory = process.env.SERVER
    ? createMemoryHistory
    : process.env.VUE_ROUTER_MODE === "history"
    ? createWebHistory
    : createWebHashHistory;

  const Router = createRouter({
    scrollBehavior: () => ({ left: 0, top: 0 }),
    routes,

    // Leave this as is and make changes in quasar.conf.js instead!
    // quasar.conf.js -> build -> vueRouterMode
    // quasar.conf.js -> build -> publicPath
    history: createHistory(
      process.env.MODE === "ssr" ? void 0 : process.env.VUE_ROUTER_BASE
    ),
  });

  Router.beforeEach(async (to, from, next) => {
    let token = authService.getToken();
    // 第二种方法：获取路由对象 router 的方法2
    const store = useStore();
    console.log(store + "1---" + store.state.count);
    console.log("token : " + token);
    if (token) {
      if (!store.state) {
        if (whiteList.indexOf(to.path) !== -1) {
          next();
        } else {
          next("/login");
        }
      }
      let userInfo = store.state.user.userInfo;
      console.log("userInfo---" + userInfo.username);
      if (!userInfo.username) {
        try {
          await store.dispatch("user/getUserInfo");
          next();
        } catch (e) {
          if (whiteList.indexOf(to.path) !== -1) {
            next();
          } else {
            next("/login");
          }
        }
      } else {
        if (hasPermission(to)) {
          next();
        } else {
          next({ path: "/403", replace: true });
        }
      }
    } else {
      if (whiteList.indexOf(to.path) !== -1) {
        next();
      } else {
        next("/login");
      }
    }
  });

  return Router;
});
